﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Runtime.InteropServices;

namespace Interop
{
	[StructLayout(LayoutKind.Sequential)]
	public struct KeyboardHookStruct
	{
		public int VirtualKeyCode;
		public int ScanCode;
		public int Flags;
		public int Time;
		public IntPtr ExtraInfo;
	}
	[StructLayout(LayoutKind.Sequential)]
	public struct MouseHookStruct
	{
		[StructLayout(LayoutKind.Sequential)]
		public struct POINT
		{
			public int X;
			public int Y;
		}
		public POINT Point;
		public int MouseDelta;
		public int Flags;
		public int Time;
		public IntPtr ExtraInfo;
	}

	[StructLayout(LayoutKind.Sequential)]
	public struct RECT
	{
		public int left;
		public int top;
		public int right;
		public int bottom;
	}

	[StructLayout(LayoutKind.Sequential)]
	public struct APPBARDATA
	{
		public int cbSize;
		public IntPtr hWnd;
		public uint uCallbackMessage;
		public uint uEdge;
		public RECT rc;
		public IntPtr lParam;
		public static APPBARDATA NewAPPBARDATA()
		{
			APPBARDATA abd = new APPBARDATA();
			abd.cbSize = Marshal.SizeOf(typeof(APPBARDATA));
			return abd;
		}
	}

	//[StructLayout(LayoutKind.Sequential)]
	//public struct LowLevelKeyboardHookStruct
	//{
	//    public int VkCode;
	//    public int ScanCode;
	//    public int Flags;
	//    public int Time;
	//    public int DwExtraInfo;
	//}

	//[StructLayout(LayoutKind.Sequential)]
	//public struct POINT
	//{
	//    public int X;
	//    public int Y;
	//}
	//[StructLayout(LayoutKind.Sequential)]
	//public struct LowLevelMouseHookStruct
	//{
	//    public POINT Point;
	//    public uint MouseData;
	//    public uint Flags;
	//    public uint Time;
	//    public IntPtr DwExtraInfo;
	//}
}
